#define _CRT_SECURE_NO_WARNINGS 

//#include <iostream>
//using namespace std;
//
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//	{
//		int a, b, c, n;
//		cin >> a >> b >> c >> n;
//		int sum = a + b + c + n;
//		if (sum % 3 == 0)
//		{
//			int t = sum / 3;
//			if (t >= a && t >= b && t >= c)
//				cout << "YES" << endl;
//			else cout << "NO" << endl;
//		}
//		else cout << "NO" << endl;
//	}
//	return 0;
//}


//#include <iostream>
//#include <map>
//#include <vector>
//using namespace std;
//map<pair<int, int>, int> mp;
//int cnt = 0;
//
//void dfs(int a, int b, int c, int d, vector<int> path)
//{
//    if (path.size() == 12)
//    {
//        cout << path[0] << endl;
//        cnt++;
//        return;
//    }
//    int n = path.size();
//    int f[5] = { 0 };
//    for (int i = 0; i < n; i++)
//    {
//        if (mp[{n + 1, i + 1}])
//            f[path[i]] = 1;
//    }
//
//    if (!f[1] && a > 0) { path.push_back(1); dfs(a - 1, b, c, d, path); }
//    if (!f[2] && b > 0) { path.push_back(2); dfs(a, b - 1, c, d, path); }
//    if (!f[3] && c > 0) { path.push_back(3); dfs(a, b, c - 1, d, path); }
//    if (!f[4] && d > 0) { path.push_back(4); dfs(a, b, c, d - 1, path); }
//}
//
//
//int main()
//{
//    int a, b, c, d, m;
//    cin >> a >> b >> c >> d >> m;
//
//    while (m--)
//    {
//        int x, y;
//        cin >> x >> y;
//        mp[{x, y}] = mp[{y, x}] = 1;
//    }
//    vector<int>path;
//    dfs(a, b, c, d, path);
//
//    cout << cnt << endl;
//    return 0;
//}

//#include <iostream>
//using namespace std;
//int main()
//{
//	int a = 100;
//	long long b = 1000000000000;
//	a = b + a;
//	cout << a << endl;
//	return 0;
//}


//#include <iostream>
//#include <map>
//#include <algorithm>
//using namespace std;
//
//int main()
//{
//	int n;
//	cin >> n;
//	string s;
//	cin >> s;
//	if (s[n - 1] == 'o')
//		cout << "Yes" << endl;
//	else cout << "No" << endl;
//	return 0;
//}

//#include <iostream>
//#include <map>
//#include <algorithm>
//using namespace std;
//int a[30];
//
//int main()
//{
//	map<int, char>mp;
//	int cnt = 1;
//	for (char ch = 'a'; ch <= 'z'; ch++)
//	{
//		mp[cnt++] = ch;
//	}
//	for (int i = 1; i <= 26; i++)
//		cin >> a[i];
//	for (int i = 1; i <= 26; i++)
//		cout << mp[a[i]];
//	cout << endl;
//	return 0;
//}
//#include <iostream>
//#include <map>
//#include <algorithm>
//using namespace std;
//string s1[210], s2[210];
//
//int main()
//{
//	int n;
//	cin >> n;
//	for (int i = 0; i < n; i++)
//		cin >> s1[i];
//	for (int i = 0; i < n; i++)
//		cin >> s2[i];
//
//	return 0;
//}

//#include <iostream>
//#include <map>
//#include <algorithm>
//using namespace std;
//
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//	{
//		int a[3];
//		for (int i = 0; i < 3; i++) cin >> a[i];
//		for (int i = 0; i < 5; i++)
//		{
//			sort(a, a + 3);
//			a[0]++;
//		}
//		cout << a[0] * a[1] * a[2] << endl;;
//	}
//
//	return 0;
//}


//#include <iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int a[N];
//
//void solve()
//{
//	int n, k;
//	cin >> n >> k;
//	for (int i = 0; i < k; i++)cin >> a[i];
//	int mx = 0, sum = 0;
//	for (int i = 0; i < k; i++)
//	{
//		int t = a[i] - 1;
//		mx = max(t, mx);
//		sum += (t + a[i]);
//	}
//	cout << sum - (mx * 2 + 1) << endl;
//}
//
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//		solve();
//	return 0;
//}

//#include <iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int a[N];
//
//void solve()
//{
//	int n, m, k;
//	cin >> n >> m >> k;
//	for (int i = n; i > m; i--)
//		cout << i << ' ';
//	for (int i = 1; i <= m; i++)
//		cout << i << ' ';
//	cout << endl;
//}
//
//int main()
//{
//	int t;
//	cin >> t;
//	while (t--)
//	{
//		solve();
//	}
//	return 0;
//}

//#include <iostream>
//#include <map>
//#include <vector>
//using namespace std;
//const int N = 2e3 + 01;
//int x[N], y[N];
//map<pair<int, int>, int> mp;
//
//int main()
//{
//	int n;
//	cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> x[i] >> y[i];
//		mp[{x[i], y[i]}]= 1;
//	}
//	long long ans = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		for (int j = 1; j <= n; j++)
//		{
//			if (i == j) continue;
//			//cout << ' ' << x[i] << ' ' << y[i]<< ' ' << x[j] << ' ' << y[j]<< ' ' <<  mp[{x[i], y[j]}] << ' ' << mp[{y[i], x[j]}] << endl;
//			if (mp[{x[i], y[j]}] && mp[{x[j], y[i]}] && x[i] < x[j] && y[i] < y[j])
//			{
//				ans++;
//			}
//		}
//	}
//	cout << ans << endl;
//	return 0;
//}


#include<iostream>
#include <vector>
#include <map>
using namespace std;
vector<int> w;
int flag = 0;
map<pair<int, int>, int> mp;


void dfs(int p, int u, int n, vector<int> v)
{
    if (u == 2)
    {
        if (mp[{v[0], v[1]}])flag = 1;
        return;
    }
    if (p == n) return;
    v.push_back(w[p]);
    dfs(p + 1, u + 1, n, v);
    v.pop_back();
    if (flag) return;
    dfs(p + 1, u, n, v);
}

bool check(int i)
{
    flag = 0;
    w.clear();
    while (i)
    {
        w.push_back(i % 10);
        i /= 10;
    }
    int n = w.size();
    dfs(0, 1, n, {});
    dfs(0, 0, n, {});

    return flag;
}
bool st[110];
int prime[110];
int cnt;

int main()
{
    int a, b;
    cin >> a >> b;
    for (int i = 2; i < 100; i++)
    {
        if (!st[i]) prime[cnt++] = i;
        for (int j = 0; i * prime[j] < 100; j++)
        {
            st[i * prime[j]] = true;
            if (i % prime[j] == 0) break;
        }
    }
    for (int i = 11; i < 100; i++)
    {
        if (!st[i])
        {
            int a = i / 10, b = i % 10;
            mp[{a, b}] = mp[{b, a}] = 1;
        }
    }
    if (b < 10)
    {
        cout << 0 << endl;
        return 0;
    }
    if (a <= 10) a = 11;
    int ans = 0;
    for (int i = a; i <= b; i++)
    {
        if (check(i)) ans++;
    }

    cout << ans << endl;
    return 0;
}